---
title: 代码生成器原理
---
## 代码生成器原理
Spring Boot 的代码生成器通过读取数据库表结构和配置文件，生成相关的持久层、业务逻辑和控制层代码。其原理简洁概括如下：

1. **读取数据库表结构：** 代码生成器首先连接到数据库，读取表结构信息，包括表名、字段名、数据类型等。

2. **根据模板生成代码：** 使用预定义的代码模板和配置信息，生成相应的持久层（如实体类、DAO）、业务逻辑层和控制层代码。

3. **填充数据：** 将读取到的数据库表结构信息填充到生成的代码中，包括表名、字段名、数据类型等。
```sql
```sql
SHOW  TABLE STATUS  FROM nacos_config; # 查询数据库所有表信息
SHOW FULL COLUMNS FROM nacos_config.config_info; # 查询表所有列
```
4. **生成文件：** 将生成的代码写入项目文件中，通常按照约定的目录结构。



![image-20231021233421791](https://img.wkq.pub/img/image-20231021233421791.png)

针对一般的项目，上面的代码生成器就足够了。

但针对大型项目，领域驱动项目，就不够用了。

## 自定义代码生成器

根据建模对象生成 mapper、request、repository、creator 等等。

这里的 DTO 分为 request、response。对应产品层。

针对表的操作对象分为了 Creator 和 Updator 。不允许拿到 entity 直接 set 值。想改状态，必须调用方法。最大的好处在于维护点的统一。

所有业务的更新都是通过 Creator 和 Updator 来做的

![image-20231021234216019](https://img.wkq.pub/img/image-20231021234216019.png)



VO 只能对应一个单表的 VO，但是会有 Response 对象， 一个 Response 对象可能会对应两个 VO，比如模板和模板项的关系。

![image-20231021235755553](https://img.wkq.pub/img/image-20231021235755553.png)

Request 对象，一次保存，可能会包含多个对象，然后转换成多个 Creator

![image-20231022000239456](https://img.wkq.pub/img/image-20231022000239456.png)

在微服务时，还需要生成 Feign、Controller。

lombok 和 mapstruct 类似于代码生成器。根据 JDK 提供的关于编译期解析的工具。

数据从 Entity 中获取。
